﻿using System;
using System.Collections.Generic;
using System.Linq;
using Joel.Vishnu.Modelo.Entidades;
using Joel.Vishnu.Modelo.Enumeradores;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Presentacion;
using Joel.Vishnu.Repositorios;

namespace Joel.Vishnu.Consola
{
    public class Program
    {
        #region Metodos

        static void Main(string[] args)
        {
            Principal principal = new Principal();
            Clientes clientes = new Clientes();
            Empleados empleados = new Empleados();
            Barrios barrios = new Barrios();
            Productos productos = new Productos();
            ProductoCategorias productoCategorias = new ProductoCategorias();
            ProductoSubCategorias productoSubCategorias = new ProductoSubCategorias();
            Facturacion facturacion = new Facturacion();
            Configuraciones configuraciones = new Configuraciones();
            Iva iva = new Iva();
            Generos generos = new Generos();
            EstadosCiviles estadosCiviles = new EstadosCiviles();

            String menuPrincipal = String.Empty;
            String menuClientes = String.Empty;
            String menuEmpleados = String.Empty;
            String menuBarrios = String.Empty;
            String menuProductos = String.Empty;
            String menuProductoCategorias = String.Empty;
            String menuProductoSubCategorias = String.Empty;
            String menuFacturacion = String.Empty;
            String menuConfiguraciones = String.Empty;
            String menuIva = String.Empty;
            String menuGeneros = String.Empty;
            String menuEstadosCiviles = String.Empty;

            menuPrincipal = principal.MenuPrincipal();
            while (menuPrincipal != "0")
            {
                switch (menuPrincipal)
                {
                    case "1":
                        #region Clientes
                        {
                            menuClientes = clientes.Menu();
                            while (menuClientes != "0")
                            {
                                switch (menuClientes)
                                {
                                    case "1":
                                        {
                                            clientes.Insertar();
                                            break;
                                        }
                                    case "2":
                                        {
                                            clientes.Modificar();
                                            break;
                                        }
                                    case "3":
                                        {
                                            clientes.Eliminar();
                                            break;
                                        }
                                    case "4":
                                        {
                                            clientes.Listado();
                                            break;
                                        }
                                    case "5":
                                        #region Barrios
                                        {
                                            menuBarrios = barrios.Menu(EnumMenus.CLIENTES);
                                            while (menuBarrios != "0")
                                            {
                                                switch (menuBarrios)
                                                {
                                                    case "1":
                                                        {
                                                            barrios.Insertar();
                                                            break;
                                                        }
                                                    case "2":
                                                        {
                                                            barrios.Modificar();
                                                            break;
                                                        }
                                                    case "3":
                                                        {
                                                            barrios.Eliminar();
                                                            break;
                                                        }
                                                    case "4":
                                                        {
                                                            barrios.Listado();
                                                            break;
                                                        }
                                                }
                                                menuBarrios = barrios.Menu(EnumMenus.CLIENTES);
                                            }
                                            break;
                                        }
                                        #endregion
                                }
                                menuClientes = clientes.Menu();
                            }
                            break;
                        }
                    #endregion
                    case "2":
                        #region Empleados
                        {
                            menuEmpleados = empleados.Menu();
                            while (menuEmpleados != "0")
                            {
                                switch (menuEmpleados)
                                {
                                    case "1":
                                        {
                                            empleados.Insertar();
                                            break;
                                        }
                                    case "2":
                                        {
                                            empleados.Modificar();
                                            break;
                                        }
                                    case "3":
                                        {
                                            empleados.Eliminar();
                                            break;
                                        }
                                    case "4":
                                        {
                                            empleados.Listado();
                                            break;
                                        }
                                    case "5":
                                        #region Barrios
                                        {
                                            menuBarrios = barrios.Menu(EnumMenus.EMPLEADOS);
                                            while (menuBarrios != "0")
                                            {
                                                switch (menuBarrios)
                                                {
                                                    case "1":
                                                        {
                                                            barrios.Insertar();
                                                            break;
                                                        }
                                                    case "2":
                                                        {
                                                            barrios.Modificar();
                                                            break;
                                                        }
                                                    case "3":
                                                        {
                                                            barrios.Eliminar();
                                                            break;
                                                        }
                                                    case "4":
                                                        {
                                                            barrios.Listado();
                                                            break;
                                                        }
                                                }
                                                menuBarrios = barrios.Menu(EnumMenus.CLIENTES);
                                            }
                                            break;
                                        }
                                        #endregion
                                }
                                menuEmpleados = empleados.Menu();
                            }
                            break;
                        }
                    #endregion
                    case "3":
                        #region Productos
                        {
                            menuProductos = productos.Menu();
                            while (menuProductos != "0")
                            {
                                switch (menuProductos)
                                {
                                    case "1":
                                        {
                                            productos.Insertar();
                                            break;
                                        }
                                    case "2":
                                        {
                                            productos.Modificar();
                                            break;
                                        }
                                    case "3":
                                        {
                                            productos.Eliminar();
                                            break;
                                        }
                                    case "4":
                                        {
                                            productos.Listado();
                                            break;
                                        }
                                    case "5":
                                        #region ProductoCategorias
                                        {
                                            menuProductoCategorias = productoCategorias.Menu();
                                            while (menuProductoCategorias != "0")
                                            {
                                                switch (menuProductoCategorias)
                                                {
                                                    case "1":
                                                        {
                                                            productoCategorias.Insertar();
                                                            break;
                                                        }
                                                    case "2":
                                                        {
                                                            productoCategorias.Modificar();
                                                            break;
                                                        }
                                                    case "3":
                                                        {
                                                            productoCategorias.Eliminar();
                                                            break;
                                                        }
                                                    case "4":
                                                        {
                                                            productoCategorias.Listado();
                                                            break;
                                                        }
                                                }
                                                menuProductoCategorias = productoCategorias.Menu();
                                            }
                                        #endregion
                                            break;
                                        }
                                    case "6":
                                        #region ProductoSubCategorias
                                        {
                                            menuProductoSubCategorias = productoSubCategorias.Menu();
                                            while (menuProductoSubCategorias != "0")
                                            {
                                                switch (menuProductoSubCategorias)
                                                {
                                                    case "1":
                                                        {
                                                            productoSubCategorias.Insertar();
                                                            break;
                                                        }
                                                    case "2":
                                                        {
                                                            productoSubCategorias.Modificar();
                                                            break;
                                                        }
                                                    case "3":
                                                        {
                                                            productoSubCategorias.Eliminar();
                                                            break;
                                                        }
                                                    case "4":
                                                        {
                                                            productoSubCategorias.Listado();
                                                            break;
                                                        }
                                                }
                                                menuProductoSubCategorias = productoSubCategorias.Menu();
                                            }
                                        #endregion
                                            break;
                                        }
                                }
                                menuProductos = productos.Menu();
                            }
                            break;
                        }
                    #endregion
                    case "4":
                        #region Facturacion
                        {
                            menuFacturacion = facturacion.Menu();
                            while (menuFacturacion != "0")
                            {
                                switch (menuFacturacion)
                                {
                                    case "1":
                                        {
                                            facturacion.Gestionar();
                                            break;
                                        }
                                    case "2":
                                        {
                                            facturacion.Historial();
                                            break;
                                        }
                                }
                                menuFacturacion = facturacion.Menu();
                            }
                            break;
                        }
                    #endregion
                    case "5":
                        #region Configuraciones
                        {
                            menuConfiguraciones = configuraciones.Menu();
                            while (menuConfiguraciones != "0")
                            {
                                switch (menuConfiguraciones)
                                {
                                    case "1":
                                        #region Iva
                                        {
                                            menuIva = iva.Menu();
                                            while (menuIva != "0")
                                            {
                                                switch (menuIva)
                                                {
                                                    case "1":
                                                        {
                                                            iva.Modificar();
                                                            break;
                                                        }
                                                }
                                                menuIva = iva.Menu();
                                            }
                                            break;
                                        }
                                        #endregion
                                    case "2":
                                        #region Generos
                                        {
                                            generos.Listado();
                                            break;
                                        }
                                        #endregion
                                    case "3":
                                        #region EstadosCiviles
                                        {
                                            estadosCiviles.Listado();
                                            break;
                                        }
                                        #endregion
                                }
                                menuConfiguraciones = configuraciones.Menu();
                            }
                            break;
                        }
                    #endregion
                }
                menuPrincipal = principal.MenuPrincipal();
            }
        }

        #endregion
    }
}
